<?php
namespace app\demo_record\widget;

use think\View;



class MenuWidget
{
    /**
     * @var MenuItem[] $items 菜单项
     */
    public $items=[];

    /**
     * 插入菜单项
     * @param array[] $items 二维数组
     * @return self
     */
    public function insertItems($items)
    {
        foreach($items as $index => $item){
            $obj = new MenuItem;
            $obj->title = $item["title"];
            $obj->name = isset($item["name"]) ? $item["name"] : md5($item["title"]);
            if(isset($item["active"]) && $item["active"])   $obj->active = true;
            if(isset($item["flag"]) && $item["flag"])       $obj->flag = explode(",",$item["flag"]);
            if(isset($item["order"]) && $item["order"])     $obj->order = intval($item["order"]);
            if(isset($item["href"]) && $item["href"])       $obj->href = trim($item["href"]);
            if(isset($item["type"]) && $item["type"])       $obj->href_type = trim($item["type"]);
            if(isset($item["target"]) && $item["target"])   $obj->href_target = trim($item["target"]);
            $this->items[]=$obj;
        }
        return $this;
    }

    /**
     * 插入菜单项(只设置标题)
     * @param array $titles 标题数组
     * @return self
     */
    public function insertItemTitles($titles)
    {
        foreach($titles as $index => $title){
            $obj = new MenuItem;
            $obj->title = $title;
            $obj->name = md5($title);
            $this->items[]=$obj;
        }
        return $this;
    }

    /**
     * 获取菜单项(包含被转换成字符串的参数)
     * @param string $active_class 当前选中的项目的css类
     * @return array[]
     */
    public function getItems($active_class="active")
    {
        $arr=[];
        foreach($this->items as $item){
            $css_class=$item->flag;
            if($item->active){
                $css_class[]=$active_class;
            }

            $url="";
            if($item->href){
                $url = $item->href_type==="path" ? url($item->href) : $item->href;
            }
            
            $data=$item->toArray();
            $data["id_str"] = "id='$item->name'";
            $data["href_str"] = $url ? "href='$url'" : '';
            $data["target_str"] = $item->href_target ? "target='$item->href_target'" : '';
            $data["class_str"] = $css_class ? "class='".implode(" ",$css_class)."'" : '';
            $arr[$item->name]=$data;
        }
        return $arr;
    }
    
    /**
     * 绑定单独的模板文件
     * @param string $template 模板路径
     * @return string
     */
    public function fetch($template='demo_record@menu_widget/menu')
    {
        $view=new View();
        $view->assign("menu",$this);
        return $view->fetch($template);
    }
}

/**
 * 菜单项
 * @var string $name 名称
 * @var string $title 标题
 * @var string $href 链接地址
 * @var string $href_type 链接类型
 *  path,内部路径;
 *  url,普通URL;
 *  anchor,当前页面中的锚;
 *  selector,CSS选择器;
 * @var string $href_target 打开方式
 *  _blank;_self;_parent;_top;
 *  target名称
 * @var bool $active 是否是当前选中项
 * @var string[] $flag 标记
 * @var int $order 序号
 */
class MenuItem
{
    public $name="";
    public $title="";
    public $href="";
    public $href_type="";
    public $href_target="";
    public $active=false;
    public $flag=[];
    public $order=0;
    public function toArray()
    {
        $data=[];
        foreach($this as $key => $value){
            $data[$key]=$value;
        }
        return $data;
    }
}
